package com.spring.lesson001.demo12.cglib.eg3;

import org.junit.Test;
import org.springframework.cglib.proxy.Enhancer;
import org.springframework.cglib.proxy.FixedValue;
import org.springframework.cglib.proxy.NoOp;

/**
 * @author vhans
 */
public class CglibTest {
    @Test
    public void test3() {
        Enhancer enhancer = new Enhancer();
        enhancer.setSuperclass(Service3.class);
        // 当调用某个类的任何方法的时候，都希望返回一个固定的值，此时可以使用FixedValue接口
        enhancer.setCallback(new FixedValue() {
            @Override
            public Object loadObject() throws Exception {
                return "Vhans";
            }
        });
        Service3 proxy = (Service3) enhancer.create();
        System.out.println(proxy.m1());
        System.out.println(proxy.m2());
        System.out.println(proxy.toString());
    }

    @Test
    public void test4() {
        Enhancer enhancer = new Enhancer();
        enhancer.setSuperclass(Service3.class);
        // ca11back接口下面有个子接口org.springframework.cg1ib.proxy.Noop，
        // 将这个作为Callback的时候，被调用的方法会直接放行，像没有任何代理一样。
        enhancer.setCallback(NoOp.INSTANCE);
        Service3 proxy = (Service3) enhancer.create();
        System.out.println(proxy.m1());
        System.out.println(proxy.m2());
        System.out.println(proxy.toString());
    }
}
